package gui;

import java.awt.event.*;
import javax.swing.*;

// Centraal frame waar andere panels worden ingeladen

/**
 * Klasse MainFrame
 * In deze klasse wordt het Frame aangemaakt (GUI) waarin alle panels zullen komen.
 * 
 * @author Maarten Minnebo, David Covemaeker, Tim Van Thuyne, Toon Kint
 * 
 */
public class MainFrame extends JFrame
{
	private static final long serialVersionUID = -6348135934861221071L;
	private final int WIDTH = 770;
	private final int HIGHT = 530;
	private ComponentSwitcher panelSwitcher;
	private GUIController guiController;
	
	/**
	 *  Constructor 
	 *  stelt titel van het frame in en roept GUI initialisatie op	 *  
	 * @param guic GUIController
	 */
	public MainFrame(GUIController guic)
	{
		super("Java IRC Client");
		guiController = guic;
		panelSwitcher = new ComponentSwitcher();
		initGUI();
	}

	/**
	 * Functie die wordt opgeroepen vanuit constructor.
	 * Bevat alle methodes om de GUI te initialiseren.
	 */
	private void initGUI()
	{
		try
		{
			setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
			setLayout(null);
			setSize(WIDTH, HIGHT);
			setResizable(false);
			setLocationRelativeTo(null);
			
			this.setIconImage(new ImageIcon(getClass().getClassLoader().getResource("irc_logo.png")).getImage());
		
			// Zorg voor Waarschuwing bij het sluiten
			addWindowListener(new WindowAdapter() 
			{
				@Override
				public void windowClosing(WindowEvent e) 
				{
					Object[] opties = { "Afsluiten", "Annuleren" };
					int keuze = JOptionPane.showOptionDialog(e.getComponent(),"Bent u zeker dat u wilt afsluiten?", "Afsluiten",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,null, opties, opties[1]);
					
					if(keuze == 0)
					{
						guiController.disconnect();
						System.exit(0);
					}
				}
			});
	   
		repaint();
		setVisible(true);
		
		} catch(Exception e) 
		{		
			JOptionPane.showMessageDialog(getContentPane(), "Er is een onverwachte fout opgetreden!","Foutbootschap",JOptionPane.ERROR_MESSAGE);
			e.printStackTrace();
		}
	}
	
	
	/**
	 * Functie die kan aangeroepen worden om alle panels te wissen en een nieuw panel in te stellen.
	 * @param guiController GUIController
	 * @param panel nieuwe panel
	 */
	public void switchToComponent(GUIController guiController, ComponentSwitcher.ComponentChoice panel)
	{
		getContentPane().removeAll();
		setContentPane(panelSwitcher.showComponent(guiController, this, panel));
		validate();
	}
}
